% !TEX TS-program = pdflatex
% !TEX encoding = UTF-8 Unicode


\documentclass[12pt]{report} % use larger type; default would be 10pt

\usepackage[utf8]{inputenc} % set input encoding (not needed with XeLaTeX)
\usepackage[frenchb]{babel} 

%%% Examples of Article customizations
% These packages are optional, depending whether you want the features they provide. 
% See the LaTeX Companion or other references for full information. 
\usepackage{ amssymb }

%%% PAGE DIMENSIONS
\usepackage{geometry} % to change the page dimensions
\geometry{a4paper} % or letterpaper (US) or a5paper or.... 
 \geometry{margin=2cm} % for example, change the margins to 2 inches all round
% \geometry{landscape} % set up the page for landscape
%  read geometry. pdf for detailed page layout information

\usepackage{graphicx} % support the \includegraphics command and options

% \usepackage[parfill]{parskip} % Activate to begin paragraphs with an empty line rather than an indent
%\usepackage{ragged2e}
%%% PACKAGES
\usepackage{booktabs} % for much better looking tables
\usepackage{array} % for better arrays (eg matrices) in maths
%\usepackage{paralist} % very flexible & customisable lists (eg. enumerate/itemize, etc. )
\usepackage{verbatim} % adds environment for commenting out blocks of text & for better verbatim
%\usepackage{subfig} % make it possible to include more than one captioned figure/table in a single float
% These packages are all incorporated in the memoir class to one degree or another... 

%%% ToC (table of contents) APPEARANCE
%\usepackage[nottoc,notlof,notlot]{tocbibind} % Put the bibliography in the ToC
%\usepackage[titles,subfigure]{tocloft} % Alter the style of the Table of Contents
%\renewcommand{\cftsecfont}{\rmfamily\mdseries\upshape}
%\renewcommand{\cftsecpagefont}{\rmfamily\mdseries\upshape} % No bold!

%%% END Article customizations
\usepackage[usenames,dvipsnames]{color}
%%% The "real" document content comes below... 
\usepackage{todonotes}

\usepackage{hyperref}
\hypersetup{
  bookmarks=true,     % show bookmarks bar?
  unicode=false,     % non-Latin characters in Acrobat’s bookmarks
  pdftoolbar=true,    % show Acrobat’s toolbar?
  pdfmenubar=true,    % show Acrobat’s menu?
  pdffitwindow=false,   % window fit to page when opened
  pdfstartview={FitH},  % fits the width of the page to the window
  pdftitle={Alfred s'est perdu},  % title
  pdfauthor={Émilie Colin, Nicolas Lefebvre},   % author
  pdfsubject={Robotique, exploration d'un labyrinthe},  % subject of the document
  pdfcreator={Émilie Colin},  % creator of the document
  pdfproducer={TeXworks}, % producer of the document
  pdfkeywords={robotique} {alfred} {labyrinthe}{master}{SCA}, % list of keywords
  pdfnewwindow=true,   % links in new window
  colorlinks=true,    % false: boxed links; true: colored links
  linkcolor=dark-gray,     % color of internal links (change box color with linkbordercolor)
  citecolor=OliveGreen,    % color of links to bibliography
  filecolor=magenta,   % color of file links
  urlcolor=cyan      % color of external links
}
\definecolor{dark-gray}{gray}{0.30}

\usepackage{url }
\usepackage{endnotes}
\renewcommand*\makeenmark{\hbox{\textsuperscript{{\theenmark}}}}
\renewcommand\theendnote{\roman{endnote}}

%% Define a new 'leo' style for the package that will use a smaller font. 
\makeatletter
\def\url@leostyle{%
 \@ifundefined{selectfont}{\def\UrlFont{\sf}}{\def\UrlFont{\footnotesize\ttfamily}}}
\makeatother
%% Now actually use the newly defined style. 
\urlstyle{leo}

\title{\textsc{Sciences Cognitives et Robotique}}
\author{Nicolas Lefebvre, Émilie Colin
\vspace{1cm}\\
encadrés par Sylvain Castagnos}
%\date{} % Activate to display a given date or no date (if empty),
     % otherwise the current date is printed 

\usepackage{tikz}
\usepackage{ccaption}
\usepackage{fancyhdr}
\pagestyle{fancyplain}

\begin{document}
\maketitle

\newpage
\begin{figure}

  \caption{Fonctionnement global}
  \centering
\includegraphics[width=\textwidth]{Organigramme1.png}
\end{figure}

\chapter[Spécificités]{Présentation des spécificités}

\section{Fonctionnement applicatif global}
Le robot géré pour ce projet est dépendant d'un environnement prédéfini. Ses caractéristiques sont détaillées de manière globale afin de pouvoir être adaptées. \\
Le but :
\begin{itemize}
\item confort
\item sobriété du code
\item maintenabilité
\end{itemize}

Le labyrinthe est lui considéré comme stable, et donc, au sein du programme, nous l'utilisons de manière `brute' : ce n'est pas du paramétrage. Le franchissement intercellule fait par exemple avancer le robot de quatre centimètres. 


La première partie du problème consiste en une navigation non informéevers une case cible à la position inconnue. La seconde est un parcours informé (le retour).



\subsection{Ordonnancement}
L'ordonnancement des comprend du robot est primordial. Nous avons retenu le suivant :
\begin{enumerate}
\item Détection d'obstacle
\item Changement de direction
\item Changer de cellule
\item Trouver ligne droite
\item Trouver ligne gauche
\item Suivre ligne
\end{enumerate}

\subsection{Procédures en jeu}

La figure~\ref{fig:process}  indique le processus complet.
\paragraph{}
A l'initialisation, le robot lance un auto-étalonnage. Cet étalonnage, mesuré car les données renvoyées suscitent parfois la complexité, permettent de fixer les paliers des différentes luminosités à prendre en compte.

En évaluant la proximité des valeurs, nous détectons les tangentes et donc les paliers (CF figure ~\ref{fig:etalon}). Il est à noter que le balayage ainsi fait permet au robot de vraiment bien se repositionner. C'est donc une stratégie qui serait préférée au positionnement un peu moins fin qu'un simple recadrage par rapport à la ligne droite.

\begin{figure}
  \caption{Etalonnage de la luminosité}
  \centering
\includegraphics[width=0.6\textwidth]{etalonnage.png}
\label{fig:etalon}
\end{figure}

\begin{figure}
  \caption{Processus complet}
  \centering
\includegraphics[width=0.9\textwidth]{process.png}
\label{fig:process}
\end{figure}


\chapter{Objectifs}

\section{Suivi de ligne}
Le suivi de ligne est un comportement spécifique, le comportement de base pourrait-on dire. Il est donc implémenté dans un behavior à part entière. Lors de son arrêt, il bascule à vrai l'attribut $CHANGEMENT\_CELLULE$ du robot.

L'auto-étalonnage (fonction autoCalibrer de Robot.java, s'appuyant sur la fonction effectuerBalayage) nous permet d'avancer correctement en suivant une ligne. 

\paragraph{}
\textsc{Objectif atteint}
\section{Navigation}
Outre suivre une ligne et s'y maintenir, le robot changer de direction.  La classe ChangerDeDirection.java amorce d'abord un recul (Robot.reculerJusquaBordCase()). Il effectue alors un car de tour avant de laisser la main au processus qui lui est prioritaire, la détection d'obstacle.

\paragraph{}
\textsc{Objectif atteint}

\section{Détection d'obstacle}

La détection d'obstacles est fonctionnelle. Le robot effectue alors un demi-tour à 180\degre. Sinon, il continue sa route, tout droit en suivant un mur.
\paragraph{}
\textsc{Objectif atteint}


\section{Impasses}

La navigation en sens inverse est gérée sur un attribut de classe dont Robot est porteur (booléen sens\_normal), est utilisée pour gérée la notion de `couloir de droite'. Trois accesseurs en permettent l'usage (estEnSensNormal(boolean sens) pour affecter le sens, estEnSensNormal() pour le connaître, inverserSensDeNavigation() pour\ldots{} inverser le sens de navigation).
Leur usage est implémenté où nécessaire.

\paragraph{}
\textsc{Objectif atteint}

\section{Intersections}
Le changement de direction, utilisé lors de la navigation, implique de traiter les intersections. La classe ChangerDeDirection implémentant le comportement éponyme gère donc le fait de se trouver sur du blanc. Elle exécute les man\oe{}uvres nécessaires.
\paragraph{}
\textsc{Objectif atteint}

\section{Détection du sens de navigation}
 Le sens de navigation a été géré dans le même temps que la détection du chemin.
\paragraph{}
\textsc{Objectif atteint}

\section{Labyrinthe}
Equiper le robot avec les comportements présenter auparavant permettent d'affronter l'objectif n\degre{}7. Il peut s'y déplacer avec l'ordonnancement présenté en première partie. Le changement de cellule, troisième comportement, affiche la carte construite au fur et à mesure. Il appelle Labyrinthe.draw() qui possède un objet Plateau (notre carte) et le fait se dessiner, chaque case se peignant à sa propre position.
\paragraph{}
\textsc{Objectif atteint}

\section{Cellule cible}
Si on parcours un labyrinthe en suivant un mur de façon stricte, on arrive obligatoirement à la case d'arriver. Le programme permet donc d'arriver à la case \textit{arrivée}.
\paragraph{}
\textsc{Objectif en suspens}

\section{Retour à la base}

\paragraph{}
\textsc{Objectif en suspens}

\end{document}